#include <my_header.h>
// 获取当前时间的毫秒值
long long current_time_mills(void)
{
    // stat系统调用函数中stat结构体内的struct timespec st_mtim
    // 文件的最后修改时间的结构体对象
    // 成员包括 tv_sec tv_nsec
    struct timespec ts;
    // int clock_gettime(clockid_t clock_id, struct timespec *tp);
    clock_gettime(CLOCK_REALTIME, &ts); // 获取当前时间
    return (long long)ts.tv_sec * 1000000000LL + ts.tv_nsec;
    // 转换为毫秒
}

void cp_file(const char *src, const char *dest)
{
    FILE *source = fopen(src, "rb");    //源文件
    FILE *destination = fopen(dest, "wb");  //目标文件

    if(source == NULL)
    {
        perror("文件打开失败！");
        exit(EXIT_FAILURE);
    }

    if(dest == NULL)
    {
        fclose(source);
        perror("目标文件打开失败！");
        exit(EXIT_FAILURE);
    }

    char buf[1024];
    size_t bytes;

    while((bytes = fread(buf, 1, sizeof(buf), source)) >0)
    {
        fwrite(buf, 1 ,bytes, destination);
    }


    fclose(source);
    fclose(destination);
}

/* Usage:  ./3_cp_time source_file dest_file*/
int main(int argc, char *argv[]){                                  
    ARGS_CHECK(argc, 3);

    const char *src = argv[1];
    const char *dest = argv[2];

    long long start_time = current_time_mills();  //记录开始时间
    cp_file(src, dest); // 执行文件复制操作
    long long end_time = current_time_mills();  // 记录结束时间
    
    // 输出复制所需时间
    printf("文件复制时间: %lld 毫秒\n", end_time - start_time);
   
    return 0;
}


